class Product < ActiveRecord::Base

  has_many :product_attributes, :dependent => :delete_all, :include => :attribute
  has_many :cart_items, :include => :cart, :dependent => :delete_all
  has_many :carts, :through => :cart_items
  has_many :order_items
  has_many :product_categories
  has_many :categories, :through => :product_categories


  validates_presence_of :name
  validates_numericality_of :stock, :only_integer => true, :greater_than_or_equal_to => 0
  validates_numericality_of :price, :greater_than_or_equal_to => 0

  
  # Retourneert een ProductImage-object.
  def image
    ProductImage.new(self)
  end


  # Verwijder ook de afbeelding als dit product wordt verwijderd, roep de
  # destroy-methode aan van het ProductImage-object.
  def before_destroy
    self.image.destroy
  end
  
  #retourneert de waarde van een product attribute gegeven de naam van een attribute
  def get_attribute_value(type)
    product_attributes.each do |product_attribute|
      if(product_attribute.attribute.name == type)
        return product_attribute.value
      end
    end
    return nil
  end
  
  #retourneert het product attribute gegeven de naam van een attribute
  def get_attribute(type)
    product_attributes.each do |product_attribute|
      if(product_attribute.attribute.name == type)
        return product_attribute
      end
    end
    return nil
  end
end
